Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/frontend/components/tools/RNodeFlasherPage.vue 32e97c105419d3bcede5c1311df3ffb63b8305a4 (32e97c10) Text, 43.23 KB

T8b949e<!-- SPDX-License-Identifier: 0BSD -->

Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col flex-1 overflow-hidden min-w-0 bg-slate-50 dark:bg-zinc-950"Tb4b4b4>
Tb4b4b4<Tff7b72ToolsPageHeader
Te6edf3iconTff7b72=Ta5d6ff"lightning-bolt"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'tools.rnode_flasher.title'Tb4b4b4)Ta5d6ff"
Tb4b4b4:Te6edf3descriptionTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'tools.rnode_flasher.description'Tb4b4b4)Ta5d6ff"
Te6edf3accentTff7b72=Ta5d6ff"purple"
Tb4b4b4>
Tb4b4b4<Tff7b72template #Te6edf3actionsTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3connectedTransportLabelTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"hidden sm:inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-bold uppercase tracking-wider bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-300"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"link-variant" Te6edf3classTff7b72=Ta5d6ff"size-3" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3connectedTransportLabel Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"p-2 text-gray-500 hover:bg-gray-100 dark:hover:bg-zinc-800 rounded-lg transition-colors flex items-center gap-2 text-sm font-medium"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showAdvanced Tff7b72= Tff7b72!Te6edf3showAdvancedTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3showAdvanced Tff7b72? Ta5d6ff'cog' Tff7b72: Ta5d6ff'cog-outline'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"hidden sm:inline"Tb4b4b4>
Tff7b72{{ Te6edf3showAdvanced Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.simple"Tb4b4b4) Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.advanced"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72a
Te6edf3hrefTff7b72=Ta5d6ff"/rnode-flasher/index.html"
Te6edf3targetTff7b72=Ta5d6ff"_blank"
Te6edf3classTff7b72=Ta5d6ff"p-2 text-gray-500 hover:bg-gray-100 dark:hover:bg-zinc-800 rounded-lg transition-colors flex items-center gap-2 text-sm font-medium"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'tools.rnode_flasher.open_original_tab'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"open-in-new" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"hidden sm:inline"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.original"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ToolsPageHeaderTb4b4b4>

T8b949e<!-- content -->
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex-1 min-h-0 min-w-0 overflow-y-auto p-3 sm:p-6 space-y-4 sm:space-y-6 pb-[max(1.5rem,env(safe-area-inset-bottom))]"
Tb4b4b4>
Tb4b4b4<Tff7b72RNodeCapabilitiesBanner
Tb4b4b4:Te6edf3capabilitiesTff7b72=Ta5d6ff"Te6edf3capabilitiesTa5d6ff"
Tb4b4b4:Te6edf3android-availableTff7b72=Ta5d6ff"Te6edf3androidBridgeTb4b4b4.Te6edf3isAvailableTb4b4b4(Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3actionTff7b72=Ta5d6ff"Te6edf3onCapabilitiesActionTa5d6ff"
Tb4b4b4/Tb4b4b4>

Tb4b4b4<Tff7b72RNodeDiagnosticsPanel Tb4b4b4:Te6edf3diagnosticsTff7b72=Ta5d6ff"Te6edf3diagnosticsTa5d6ff" Tb4b4b4/Tb4b4b4>

T8b949e<!-- setup card -->
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"border border-gray-200 dark:border-zinc-800 bg-white dark:bg-zinc-950 rounded-lg overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 md:grid-cols-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-4 sm:p-6 border-b md:border-b-0 md:border-r border-gray-100 dark:border-zinc-800"Tb4b4b4>
Tb4b4b4<Tff7b72RNodeDeviceSelector
Tb4b4b4:Te6edf3step-numberTff7b72=Ta5d6ff"T79c0ff1Ta5d6ff"
Tb4b4b4:Te6edf3connection-methodTff7b72=Ta5d6ff"Te6edf3connectionMethodTa5d6ff"
Tb4b4b4:Te6edf3wifi-hostTff7b72=Ta5d6ff"Te6edf3wifiHostTa5d6ff"
Tb4b4b4:Te6edf3selected-productTff7b72=Ta5d6ff"Te6edf3selectedProductTa5d6ff"
Tb4b4b4:Te6edf3selected-modelTff7b72=Ta5d6ff"Te6edf3selectedModelTa5d6ff"
Tb4b4b4:Te6edf3productsTff7b72=Ta5d6ff"Te6edf3productsTa5d6ff"
Tb4b4b4:Te6edf3capabilitiesTff7b72=Ta5d6ff"Te6edf3capabilitiesTa5d6ff"
Tb4b4b4:Te6edf3is-entering-dfu-modeTff7b72=Ta5d6ff"Te6edf3isEnteringDfuModeTa5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3connection-methodTff7b72=Ta5d6ff"Te6edf3connectionMethod Tff7b72= Te6edf3$eventTa5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3wifi-hostTff7b72=Ta5d6ff"Te6edf3wifiHost Tff7b72= Te6edf3$eventTa5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3selected-productTff7b72=Ta5d6ff"Te6edf3onSelectedProductChangeTa5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3selected-modelTff7b72=Ta5d6ff"Te6edf3selectedModel Tff7b72= Te6edf3$eventTa5d6ff"
Tb4b4b4@Te6edf3enter-dfuTff7b72=Ta5d6ff"Te6edf3enterDfuModeTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-4 sm:p-6 bg-gray-50/50 dark:bg-zinc-900/50"Tb4b4b4>
Tb4b4b4<Tff7b72RNodeFirmwareSelector
Te6edf3refTff7b72=Ta5d6ff"firmwareSelector"
Tb4b4b4:Te6edf3step-numberTff7b72=Ta5d6ff"T79c0ff2Ta5d6ff"
Tb4b4b4:Te6edf3recommended-firmware-filenameTff7b72=Ta5d6ff"Te6edf3recommendedFirmwareFilenameTa5d6ff"
Tb4b4b4:Te6edf3latest-releaseTff7b72=Ta5d6ff"Te6edf3latestReleaseTa5d6ff"
Tb4b4b4:Te6edf3is-downloading-firmwareTff7b72=Ta5d6ff"Te6edf3isDownloadingFirmwareTa5d6ff"
Tb4b4b4:Te6edf3firmware-fileTff7b72=Ta5d6ff"Te6edf3firmwareFileTa5d6ff"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3firmware-fileTff7b72=Ta5d6ff"Te6edf3firmwareFile Tff7b72= Te6edf3$eventTa5d6ff"
Tb4b4b4@Te6edf3download-recommendedTff7b72=Ta5d6ff"Te6edf3downloadRecommendedFirmwareTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"mt-4"Tb4b4b4>
Tb4b4b4<Tff7b72RNodeFlashAction
Tb4b4b4:Te6edf3can-flashTff7b72=Ta5d6ff"Te6edf3canFlashTa5d6ff"
Tb4b4b4:Te6edf3is-flashingTff7b72=Ta5d6ff"Te6edf3isFlashingTa5d6ff"
Tb4b4b4:Te6edf3flashing-progressTff7b72=Ta5d6ff"Te6edf3flashingProgressTa5d6ff"
Tb4b4b4:Te6edf3flashing-statusTff7b72=Ta5d6ff"Te6edf3flashingStatusTa5d6ff"
Tb4b4b4:Te6edf3error-messageTff7b72=Ta5d6ff"Te6edf3flashErrorTa5d6ff"
Tb4b4b4@Te6edf3flashTff7b72=Ta5d6ff"Te6edf3flashTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- provision/finalize -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showAdvanced Tff7b72|| Te6edf3isProvisioning Tff7b72|| Te6edf3isSettingFirmwareHashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"border border-gray-200 dark:border-zinc-800 bg-white dark:bg-zinc-950 rounded-lg p-4 sm:p-6 space-y-6"
Tb4b4b4>
Tb4b4b4<Tff7b72RNodeProvisionPanel
Tb4b4b4:Te6edf3provision-step-numberTff7b72=Ta5d6ff"T79c0ff3Ta5d6ff"
Tb4b4b4:Te6edf3can-provisionTff7b72=Ta5d6ff"Tff7b72!Tff7b72!Te6edf3selectedProduct Tff7b72&& Tff7b72!Tff7b72!Te6edf3selectedModelTa5d6ff"
Tb4b4b4:Te6edf3is-provisioningTff7b72=Ta5d6ff"Te6edf3isProvisioningTa5d6ff"
Tb4b4b4:Te6edf3is-setting-firmware-hashTff7b72=Ta5d6ff"Te6edf3isSettingFirmwareHashTa5d6ff"
Tb4b4b4@Te6edf3provisionTff7b72=Ta5d6ff"Te6edf3provisionTa5d6ff"
Tb4b4b4@Te6edf3set-hashTff7b72=Ta5d6ff"Te6edf3setFirmwareHashTa5d6ff"
Tb4b4b4/Tb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showAdvancedTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"pt-6 border-t border-gray-100 dark:border-zinc-800 space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72RNodeAdvancedTools Tb4b4b4:Te6edf3disabled-actionsTff7b72=Ta5d6ff"Te6edf3disabledAdvancedActionsTa5d6ff" Tb4b4b4@Te6edf3actionTff7b72=Ta5d6ff"Te6edf3onAdvancedActionTa5d6ff" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72RNodeDeviceDisplay Tb4b4b4:Te6edf3imageTff7b72=Ta5d6ff"Te6edf3rnodeDisplayImageTa5d6ff" Tb4b4b4@Te6edf3clearTff7b72=Ta5d6ff"Te6edf3rnodeDisplayImage Tff7b72= Tff7b72nullTa5d6ff" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- config cards -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showAdvancedTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 lg:grid-cols-2 gap-4 sm:gap-6"Tb4b4b4>
Tb4b4b4<Tff7b72RNodeBluetoothPanel Tb4b4b4@Te6edf3actionTff7b72=Ta5d6ff"Te6edf3onBluetoothActionTa5d6ff" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72RNodeTncPanel
Te6edf3v-modelTb4b4b4:Te6edf3frequencyTff7b72=Ta5d6ff"Te6edf3configFrequencyTa5d6ff"
Te6edf3v-modelTb4b4b4:Te6edf3bandwidthTff7b72=Ta5d6ff"Te6edf3configBandwidthTa5d6ff"
Te6edf3v-modelTb4b4b4:Te6edf3tx-powerTff7b72=Ta5d6ff"Te6edf3configTxPowerTa5d6ff"
Te6edf3v-modelTb4b4b4:Te6edf3spreading-factorTff7b72=Ta5d6ff"Te6edf3configSpreadingFactorTa5d6ff"
Tb4b4b4@Te6edf3actionTff7b72=Ta5d6ff"Te6edf3onTncActionTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

T8b949e<!-- help footer -->
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-col sm:flex-row items-center justify-between gap-3 p-4 border border-zinc-200 dark:border-zinc-800 rounded-2xl bg-zinc-50 dark:bg-zinc-900/30"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3 text-sm text-zinc-500"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"help-circle-outline" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.find_device_issue"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72a
Te6edf3targetTff7b72=Ta5d6ff"_blank"
Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/liamcottle/rnode-flasher"
Te6edf3classTff7b72=Ta5d6ff"text-blue-500 hover:underline text-sm font-bold"
Tb4b4b4>RNode FlasherTb4b4b4<Tb4b4b4/Tff7b72a
Tb4b4b4>
Tb4b4b4<Tff7b72a
Te6edf3targetTff7b72=Ta5d6ff"_blank"
Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/RNode_Firmware"
Te6edf3classTff7b72=Ta5d6ff"text-blue-500 hover:underline text-sm font-bold"
Tb4b4b4>RNode FirmwareTb4b4b4<Tb4b4b4/Tff7b72a
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>

Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeCapabilitiesBanner Tff7b72from Ta5d6ff"../rnode/RNodeCapabilitiesBanner.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeDeviceSelector Tff7b72from Ta5d6ff"../rnode/RNodeDeviceSelector.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeFirmwareSelector Tff7b72from Ta5d6ff"../rnode/RNodeFirmwareSelector.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeFlashAction Tff7b72from Ta5d6ff"../rnode/RNodeFlashAction.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeAdvancedTools Tff7b72from Ta5d6ff"../rnode/RNodeAdvancedTools.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeBluetoothPanel Tff7b72from Ta5d6ff"../rnode/RNodeBluetoothPanel.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeTncPanel Tff7b72from Ta5d6ff"../rnode/RNodeTncPanel.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeProvisionPanel Tff7b72from Ta5d6ff"../rnode/RNodeProvisionPanel.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeDeviceDisplay Tff7b72from Ta5d6ff"../rnode/RNodeDeviceDisplay.vue"Tb4b4b4;
Tff7b72import Te6edf3RNodeDiagnosticsPanel Tff7b72from Ta5d6ff"../rnode/RNodeDiagnosticsPanel.vue"Tb4b4b4;

Tff7b72import Te6edf3RNode Tff7b72from Ta5d6ff"../../js/rnode/RNode.js"Tb4b4b4;
Tff7b72import Te6edf3ROM Tff7b72from Ta5d6ff"../../js/rnode/ROM.js"Tb4b4b4;
Tff7b72import Te6edf3Nrf52DfuFlasher Tff7b72from Ta5d6ff"../../js/rnode/Nrf52DfuFlasher.js"Tb4b4b4;
Tff7b72import Te6edf3RNodeUtils Tff7b72from Ta5d6ff"../../js/rnode/RNodeUtils.js"Tb4b4b4;
Tff7b72import Te6edf3products Tff7b72from Ta5d6ff"../../js/rnode/products.js"Tb4b4b4;
Tff7b72import Tb4b4b4{
Te6edf3detectCapabilitiesTb4b4b4,
Te6edf3pickDefaultTransportTb4b4b4,
Te6edf3TRANSPORT_SERIALTb4b4b4,
Te6edf3TRANSPORT_BLUETOOTHTb4b4b4,
Te6edf3TRANSPORT_WIFITb4b4b4,
Tb4b4b4} Tff7b72from Ta5d6ff"../../js/rnode/Capabilities.js"Tb4b4b4;
Tff7b72import Te6edf3AndroidBridge Tff7b72from Ta5d6ff"../../js/rnode/AndroidBridge.js"Tb4b4b4;
Tff7b72import Te6edf3SerialTransport Tff7b72from Ta5d6ff"../../js/rnode/transports/SerialTransport.js"Tb4b4b4;
Tff7b72import Te6edf3BluetoothTransport Tff7b72from Ta5d6ff"../../js/rnode/transports/BluetoothTransport.js"Tb4b4b4;
Tff7b72import Te6edf3WifiTransport Tff7b72from Ta5d6ff"../../js/rnode/transports/WifiTransport.js"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3diagnose Tb4b4b4} Tff7b72from Ta5d6ff"../../js/rnode/Diagnostics.js"Tb4b4b4;

Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../../js/ToastUtils.js"Tb4b4b4;
Tff7b72import Te6edf3ToolsPageHeader Tff7b72from Ta5d6ff"./ToolsPageHeader.vue"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3rnodeIntegrityKeyForSrc Tb4b4b4} Tff7b72from Ta5d6ff"../../js/rnode/rnodeIntegrityKey.js"Tb4b4b4;

Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"RNodeFlasherPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTb4b4b4,
Te6edf3ToolsPageHeaderTb4b4b4,
Te6edf3RNodeCapabilitiesBannerTb4b4b4,
Te6edf3RNodeDeviceSelectorTb4b4b4,
Te6edf3RNodeFirmwareSelectorTb4b4b4,
Te6edf3RNodeFlashActionTb4b4b4,
Te6edf3RNodeAdvancedToolsTb4b4b4,
Te6edf3RNodeBluetoothPanelTb4b4b4,
Te6edf3RNodeTncPanelTb4b4b4,
Te6edf3RNodeProvisionPanelTb4b4b4,
Te6edf3RNodeDeviceDisplayTb4b4b4,
Te6edf3RNodeDiagnosticsPanelTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3capabilitiesTff7b72: Te6edf3detectCapabilitiesTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3androidBridgeTff7b72: Tff7b72new Te6edf3AndroidBridgeTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3connectionMethodTff7b72: Te6edf3TRANSPORT_SERIALTb4b4b4,
Te6edf3wifiHostTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3selectedProductTff7b72: Tff7b72nullTb4b4b4,
Te6edf3selectedModelTff7b72: Tff7b72nullTb4b4b4,
Te6edf3productsTb4b4b4,
Te6edf3firmwareFileTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isFlashingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3flashingProgressTff7b72: T79c0ff0Tb4b4b4,
Te6edf3flashingStatusTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3flashErrorTff7b72: Tff7b72nullTb4b4b4,
Te6edf3isProvisioningTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isSettingFirmwareHashTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isEnteringDfuModeTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isDownloadingFirmwareTff7b72: Tff7b72falseTb4b4b4,
Te6edf3rnodeDisplayImageTff7b72: Tff7b72nullTb4b4b4,
Te6edf3showAdvancedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3latestReleaseTff7b72: Tff7b72nullTb4b4b4,
Te6edf3diagnosticsTff7b72: Tff7b72nullTb4b4b4,
Te6edf3connectedTransportLabelTff7b72: Tff7b72nullTb4b4b4,
Te6edf3configFrequencyTff7b72: T79c0ff917375000Tb4b4b4,
Te6edf3configBandwidthTff7b72: T79c0ff250000Tb4b4b4,
Te6edf3configTxPowerTff7b72: T79c0ff22Tb4b4b4,
Te6edf3configSpreadingFactorTff7b72: T79c0ff11Tb4b4b4,
Te6edf3configCodingRateTff7b72: T79c0ff5Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3recommendedFirmwareFilenameTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3selectedModelTff7b72?Tb4b4b4.Te6edf3firmware_filename Tff7b72?? Tff7b72thisTb4b4b4.Te6edf3selectedProductTff7b72?Tb4b4b4.Te6edf3firmware_filenameTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3canFlashTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3connectionMethod Tff7b72=== Te6edf3TRANSPORT_WIFITb4b4b4) Tb4b4b4{
Tff7b72return Tffa657BooleanTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3wifiHost Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3firmwareFileTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3connectionMethod Tff7b72=== Te6edf3TRANSPORT_BLUETOOTHTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657BooleanTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedProduct Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3selectedModel Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3firmwareFileTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3disabledAdvancedActionsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3connectionMethod Tff7b72=== Te6edf3TRANSPORT_WIFITb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4[Ta5d6ff"detect"Tb4b4b4, Ta5d6ff"diagnose"Tb4b4b4, Ta5d6ff"reboot"Tb4b4b4, Ta5d6ff"read-display"Tb4b4b4, Ta5d6ff"dump-eeprom"Tb4b4b4, Ta5d6ff"wipe-eeprom"Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3refreshCapabilitiesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3connectionMethod Tff7b72= Te6edf3pickDefaultTransportTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3capabilitiesTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3loadVendorLibrariesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3fetchLatestReleaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Te6edf3refreshCapabilitiesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3capabilities Tff7b72= Te6edf3detectCapabilitiesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onSelectedProductChangeTb4b4b4(Te6edf3productTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedProduct Tff7b72= Te6edf3productTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3selectedModel Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onCapabilitiesActionTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3action Tff7b72=== Ta5d6ff"load-polyfill"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loadVendorLibrariesTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3infoTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.support.actions.polyfill_loading"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3action Tff7b72=== Ta5d6ff"request-bluetooth"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3androidBridgeTb4b4b4.Te6edf3requestPermissionTb4b4b4(Te6edf3AndroidBridgeTb4b4b4.Te6edf3PERM_BLUETOOTHTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3infoTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.support.actions.bluetooth_requested"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3action Tff7b72=== Ta5d6ff"open-bluetooth-settings"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3androidBridgeTb4b4b4.Te6edf3openBluetoothSettingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3fetchLatestReleaseTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Ta5d6ff"/api/v1/tools/rnode/latest_release"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3latestRelease Tff7b72= Tff7b72await Te6edf3responseTb4b4b4.Te6edf3jsonTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// offline-friendly: silently ignore so the rest of the page still works
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3_resolveRecommendedAssetUrlTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3filename Tff7b72= Tff7b72thisTb4b4b4.Te6edf3recommendedFirmwareFilenameTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3filenameTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3asset Tff7b72= Tff7b72thisTb4b4b4.Te6edf3latestReleaseTff7b72?Tb4b4b4.Te6edf3assetsTff7b72?Tb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3aTb4b4b4) Tb4b4b4=> Te6edf3aTb4b4b4.Te6edf3name Tff7b72=== Te6edf3filenameTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3assetTff7b72?Tb4b4b4.Te6edf3browser_download_urlTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3assetTb4b4b4.Te6edf3browser_download_urlTb4b4b4;
Tb4b4b4}
Tff7b72return Ta5d6ff`Ta5d6ffhttps://github.com/markqvist/RNode_Firmware/releases/latest/download/Tffd700${Te6edf3filenameTffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3downloadRecommendedFirmwareTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3assetUrl Tff7b72= Tff7b72thisTb4b4b4.Te6edf3_resolveRecommendedAssetUrlTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3assetUrlTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.firmware_not_found_in_release"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3isDownloadingFirmware Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3downloadUrl Tff7b72= Ta5d6ff`Ta5d6ff/api/v1/tools/rnode/download_firmware?url=Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3assetUrlTb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Te6edf3downloadUrlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3responseTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3errorData Tff7b72= Tff7b72await Te6edf3responseTb4b4b4.Te6edf3jsonTb4b4b4(Tb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3responseTb4b4b4.Te6edf3statusText Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Te6edf3errorDataTb4b4b4.Te6edf3error Tff7b72|| Ta5d6ff`Ta5d6ffDownload failed with status Tffd700${Te6edf3responseTb4b4b4.Te6edf3statusTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3blob Tff7b72= Tff7b72await Te6edf3responseTb4b4b4.Te6edf3blobTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3file Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Te6edf3blobTb4b4b4]Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3recommendedFirmwareFilenameTb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"application/zip" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3firmwareFile Tff7b72= Te6edf3fileTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3$refsTb4b4b4.Te6edf3firmwareSelectorTff7b72?Tb4b4b4.Te6edf3setFileTb4b4b4(Te6edf3fileTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.firmware_downloaded"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_download"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isDownloadingFirmware Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadVendorLibrariesTb4b4b4(Te6edf3force Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3force Tff7b72&& Tffa657windowTb4b4b4.Te6edf3zip Tff7b72&& Tffa657windowTb4b4b4.Te6edf3CryptoJS Tff7b72&& Tffa657windowTb4b4b4.Te6edf3ESPLoaderTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3libs Tff7b72= Tb4b4b4[
Ta5d6ff"/rnode-flasher/js/zip.min.js"Tb4b4b4,
Ta5d6ff"/rnode-flasher/js/crypto-js@3.9.1-1/core.js"Tb4b4b4,
Ta5d6ff"/rnode-flasher/js/crypto-js@3.9.1-1/md5.js"Tb4b4b4,
Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3lib Tff7b72of Te6edf3libsTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_loadScriptTb4b4b4(Te6edf3libTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// continue best-effort. loadVendorLibraries is best-effort and
T8b949e// missing assets surface later through clear error toasts
Tb4b4b4}
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3esptoolPath Tff7b72= Ta5d6ff"/rnode-flasher/js/esptool-js@0.4.5/bundle.js"Tb4b4b4;
Tff7b72const Te6edf3esptool Tff7b72= Tff7b72await Tff7b72importTb4b4b4(T8b949e/* @vite-ignore */ Te6edf3esptoolPathTb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3ESPLoader Tff7b72= Te6edf3esptoolTb4b4b4.Te6edf3ESPLoaderTb4b4b4;
Tffa657windowTb4b4b4.Te6edf3Transport Tff7b72= Te6edf3esptoolTb4b4b4.Te6edf3TransportTb4b4b4;

Tff7b72const Te6edf3serialPolyfillPath Tff7b72= Ta5d6ff"/rnode-flasher/js/web-serial-polyfill@1.0.15/dist/serial.js"Tb4b4b4;
Tff7b72const Te6edf3serialPolyfill Tff7b72= Tff7b72await Tff7b72importTb4b4b4(T8b949e/* @vite-ignore */ Te6edf3serialPolyfillPathTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3serialPolyfillTb4b4b4.Te6edf3serialTb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3serial Tff7b72= Te6edf3serialPolyfillTb4b4b4.Te6edf3serialTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to load ES module vendor libraries:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3navigatorTb4b4b4.Te6edf3serial Tff7b72&& Te6edf3navigatorTb4b4b4.Te6edf3usb Tff7b72&& Tffa657windowTb4b4b4.Te6edf3serialTb4b4b4) Tb4b4b4{
Te6edf3navigatorTb4b4b4.Te6edf3serial Tff7b72= Tffa657windowTb4b4b4.Te6edf3serialTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3refreshCapabilitiesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3_loadScriptTb4b4b4(Te6edf3srcTb4b4b4) Tb4b4b4{
T8b949e// Fetch and verify SRI before injecting
Tff7b72const Te6edf3integrity Tff7b72= Tff7b72thisTb4b4b4.Te6edf3_rnodeIntegrity Tff7b72|| Tb4b4b4(Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_loadRnodeIntegrityTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3filename Tff7b72= Te6edf3rnodeIntegrityKeyForSrcTb4b4b4(Te6edf3srcTb4b4b4, Te6edf3integrityTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3expectedHash Tff7b72= Te6edf3integrityTff7b72?Tb4b4b4.Tb4b4b4[Te6edf3filenameTb4b4b4]Tb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3expectedHashTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffRNode: SRI hash missing for Tffd700${Te6edf3filename Tff7b72|| Te6edf3srcTffd700}Ta5d6ff. Refusing to load untrusted code.Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3res Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Te6edf3srcTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3resTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffRNode: failed to fetch Tffd700${Te6edf3srcTffd700}Ta5d6ff (Tffd700${Te6edf3resTb4b4b4.Te6edf3statusTffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3buf Tff7b72= Tff7b72await Te6edf3resTb4b4b4.Te6edf3arrayBufferTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hash Tff7b72= Tff7b72await Te6edf3cryptoTb4b4b4.Te6edf3subtleTb4b4b4.Te6edf3digestTb4b4b4(Ta5d6ff"SHA-384"Tb4b4b4, Te6edf3bufTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3actualHash Tff7b72= Ta5d6ff"sha384-" Tff7b72+ Te6edf3btoaTb4b4b4(Tffa657StringTb4b4b4.Te6edf3fromCharCodeTb4b4b4(Tb4b4b4...Tff7b72new Tffa657Uint8ArrayTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3actualHash Tff7b72!== Te6edf3expectedHashTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffRNode: SRI hash mismatch for Tffd700${Te6edf3filenameTffd700}Ta5d6ff. Possible tampering detected.Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e// Inject verified content as blob
Tff7b72const Te6edf3blob Tff7b72= Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3bufTb4b4b4]Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"application/javascript" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3blobUrl Tff7b72= Te6edf3URLTb4b4b4.Te6edf3createObjectURLTb4b4b4(Te6edf3blobTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4, Te6edf3rejectTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3script Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"script"Tb4b4b4)Tb4b4b4;
Te6edf3scriptTb4b4b4.Te6edf3src Tff7b72= Te6edf3blobUrlTb4b4b4;
Te6edf3scriptTb4b4b4.Te6edf3onload Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3URLTb4b4b4.Te6edf3revokeObjectURLTb4b4b4(Te6edf3blobUrlTb4b4b4)Tb4b4b4;
Te6edf3resolveTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3scriptTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3URLTb4b4b4.Te6edf3revokeObjectURLTb4b4b4(Te6edf3blobUrlTb4b4b4)Tb4b4b4;
Te6edf3rejectTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffFailed to load Tffd700${Te6edf3srcTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3headTb4b4b4.Te6edf3appendChildTb4b4b4(Te6edf3scriptTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3_loadRnodeIntegrityTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_rnodeIntegrityTb4b4b4) Tff7b72return Tff7b72thisTb4b4b4.Te6edf3_rnodeIntegrityTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3res Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Ta5d6ff"/rnode-flasher/js/integrity.json"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3resTb4b4b4.Te6edf3okTb4b4b4) Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Failed to load integrity.json"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3data Tff7b72= Tff7b72await Te6edf3resTb4b4b4.Te6edf3jsonTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_rnodeIntegrity Tff7b72= Te6edf3dataTb4b4b4.Te6edf3files Tff7b72|| Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3_rnodeIntegrityTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"RNode: Failed to load integrity hashes:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72throw Te6edf3eTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3_openTransportTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3connectionMethod Tff7b72=== Te6edf3TRANSPORT_SERIALTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3transport Tff7b72= Tff7b72await Te6edf3SerialTransportTb4b4b4.Te6edf3requestTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3transportTb4b4b4.Te6edf3openTb4b4b4(Tb4b4b4{ Te6edf3baudRateTff7b72: T79c0ff115200 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3connectedTransportLabel Tff7b72= Te6edf3transportTb4b4b4.Te6edf3descriptionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3transportTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3connectionMethod Tff7b72=== Te6edf3TRANSPORT_BLUETOOTHTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3androidBridgeTb4b4b4.Te6edf3isAvailableTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3ok Tff7b72= Tff7b72thisTb4b4b4.Te6edf3androidBridgeTb4b4b4.Te6edf3hasPermissionTb4b4b4(Te6edf3AndroidBridgeTb4b4b4.Te6edf3PERM_BLUETOOTHTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3androidBridgeTb4b4b4.Te6edf3requestPermissionTb4b4b4(Te6edf3AndroidBridgeTb4b4b4.Te6edf3PERM_BLUETOOTHTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3transport Tff7b72= Tff7b72await Te6edf3BluetoothTransportTb4b4b4.Te6edf3requestTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3transportTb4b4b4.Te6edf3openTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3connectedTransportLabel Tff7b72= Te6edf3transportTb4b4b4.Te6edf3descriptionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3transportTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3transport Tff7b72= Tff7b72new Te6edf3WifiTransportTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3wifiHostTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3transportTb4b4b4.Te6edf3openTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3connectedTransportLabel Tff7b72= Te6edf3transportTb4b4b4.Te6edf3descriptionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3transportTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3_openRNodeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3transport Tff7b72= Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_openTransportTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rnode Tff7b72= Tff7b72new Te6edf3RNodeTb4b4b4(Te6edf3transportTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3rnodeTb4b4b4, Te6edf3transport Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3_withRNodeTb4b4b4(Te6edf3callbackTb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3session Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3session Tff7b72= Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_openRNodeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3isRNode Tff7b72= Tff7b72await Te6edf3sessionTb4b4b4.Te6edf3rnodeTb4b4b4.Te6edf3detectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isRNodeTb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3sessionTb4b4b4.Te6edf3rnodeTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.not_an_rnode"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3result Tff7b72= Tff7b72await Te6edf3callbackTb4b4b4(Te6edf3sessionTb4b4b4.Te6edf3rnodeTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3sessionTb4b4b4.Te6edf3rnodeTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3resultTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3sessionTff7b72?Tb4b4b4.Te6edf3rnodeTb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3sessionTb4b4b4.Te6edf3rnodeTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72throw Te6edf3eTb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3connectedTransportLabel Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3detectTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3ver Tff7b72= Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3getFirmwareVersionTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.rnode_detected"Tb4b4b4, Tb4b4b4{ Te6edf3versionTff7b72: Te6edf3ver Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(
Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_detect_with_reason"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3runDiagnosticsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3expectedProductId Tff7b72= Tff7b72thisTb4b4b4.Te6edf3selectedProductTff7b72?Tb4b4b4.Te6edf3idTb4b4b4;
Tff7b72const Te6edf3expectedModelId Tff7b72= Tff7b72thisTb4b4b4.Te6edf3selectedModelTff7b72?Tb4b4b4.Te6edf3mapped_id Tff7b72?? Tff7b72thisTb4b4b4.Te6edf3selectedModelTff7b72?Tb4b4b4.Te6edf3idTb4b4b4;
Tff7b72const Te6edf3result Tff7b72= Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72return Te6edf3diagnoseTb4b4b4(Te6edf3rnodeTb4b4b4, Tb4b4b4{ Te6edf3expectedProductIdTb4b4b4, Te6edf3expectedModelId Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3resultTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3diagnostics Tff7b72= Te6edf3resultTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3resultTb4b4b4.Te6edf3issuesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.diagnostics_healthy"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3warningTb4b4b4(
Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.diagnostics_issues"Tb4b4b4, Tb4b4b4{ Te6edf3countTff7b72: Te6edf3resultTb4b4b4.Te6edf3issuesTb4b4b4.Te6edf3length Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_diagnostics"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3rebootTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3resetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.rebooting"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_reboot"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3readDisplayTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3buffer Tff7b72= Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72return Te6edf3rnodeTb4b4b4.Te6edf3readDisplayTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3bufferTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3rnodeDisplayImage Tff7b72= Tff7b72thisTb4b4b4.Te6edf3_displayBufferToPngTb4b4b4(Te6edf3bufferTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_read_display"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3dumpEepromTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3eeprom Tff7b72= Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Te6edf3rnodeTb4b4b4.Te6edf3getRomTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3eepromTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3RNodeUtilsTb4b4b4.Te6edf3bytesToHexTb4b4b4(Te6edf3eepromTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.eeprom_dumped"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_dump_eeprom"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3wipeEepromTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.eeprom_wipe_confirm"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3wipeRomTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3resetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.eeprom_wiped"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_wipe_eeprom"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onAdvancedActionTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3map Tff7b72= Tb4b4b4{
Te6edf3detectTff7b72: Tff7b72thisTb4b4b4.Te6edf3detectTb4b4b4,
Te6edf3diagnoseTff7b72: Tff7b72thisTb4b4b4.Te6edf3runDiagnosticsTb4b4b4,
Te6edf3rebootTff7b72: Tff7b72thisTb4b4b4.Te6edf3rebootTb4b4b4,
Ta5d6ff"read-display"Tff7b72: Tff7b72thisTb4b4b4.Te6edf3readDisplayTb4b4b4,
Ta5d6ff"dump-eeprom"Tff7b72: Tff7b72thisTb4b4b4.Te6edf3dumpEepromTb4b4b4,
Ta5d6ff"wipe-eeprom"Tff7b72: Tff7b72thisTb4b4b4.Te6edf3wipeEepromTb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3mapTb4b4b4[Te6edf3actionTb4b4b4]Tff7b72?Tb4b4b4.Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onBluetoothActionTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3map Tff7b72= Tb4b4b4{
Ta5d6ff"enable-bluetooth"Tff7b72: Tff7b72thisTb4b4b4.Te6edf3enableBluetoothTb4b4b4,
Ta5d6ff"disable-bluetooth"Tff7b72: Tff7b72thisTb4b4b4.Te6edf3disableBluetoothTb4b4b4,
Ta5d6ff"pair-bluetooth"Tff7b72: Tff7b72thisTb4b4b4.Te6edf3startBluetoothPairingTb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3mapTb4b4b4[Te6edf3actionTb4b4b4]Tff7b72?Tb4b4b4.Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onTncActionTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3action Tff7b72=== Ta5d6ff"enable-tnc"Tb4b4b4) Tff7b72thisTb4b4b4.Te6edf3enableTncModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3action Tff7b72=== Ta5d6ff"disable-tnc"Tb4b4b4) Tff7b72thisTb4b4b4.Te6edf3disableTncModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3enterDfuModeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isEnteringDfuMode Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3transport Tff7b72= Tff7b72await Te6edf3SerialTransportTb4b4b4.Te6edf3requestTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3flasher Tff7b72= Tff7b72new Te6edf3Nrf52DfuFlasherTb4b4b4(Te6edf3transportTb4b4b4.Te6edf3portTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flasherTb4b4b4.Te6edf3enterDfuModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.dfu_ready"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_dfu"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isEnteringDfuMode Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3flashTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3firmwareFileTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.select_firmware_first"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3connectionMethod Tff7b72=== Te6edf3TRANSPORT_WIFITb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_flashWifiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3connectionMethod Tff7b72=== Te6edf3TRANSPORT_BLUETOOTHTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.bluetooth_flash_unsupported"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72switch Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedProductTff7b72?Tb4b4b4.Te6edf3platformTb4b4b4) Tb4b4b4{
Tff7b72case Te6edf3ROMTb4b4b4.Te6edf3PLATFORM_ESP32Tff7b72:
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_flashEsp32Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Te6edf3ROMTb4b4b4.Te6edf3PLATFORM_NRF52Tff7b72:
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_flashNrf52Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.select_product_first"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3_flashWifiTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3WifiTransportTb4b4b4.Te6edf3isValidHostTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3wifiHostTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.invalid_host"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3isFlashing Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingProgress Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingStatus Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.preparing_firmware"Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3flashConfig Tff7b72= Tff7b72thisTb4b4b4.Te6edf3selectedModelTff7b72?Tb4b4b4.Te6edf3flash_config Tff7b72?? Tff7b72thisTb4b4b4.Te6edf3selectedProductTff7b72?Tb4b4b4.Te6edf3flash_configTb4b4b4;
Tff7b72const Te6edf3blobReader Tff7b72= Tff7b72new Tffa657windowTb4b4b4.Te6edf3zipTb4b4b4.Te6edf3BlobReaderTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3firmwareFileTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3zipReader Tff7b72= Tff7b72new Tffa657windowTb4b4b4.Te6edf3zipTb4b4b4.Te6edf3ZipReaderTb4b4b4(Te6edf3blobReaderTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3zipEntries Tff7b72= Tff7b72await Te6edf3zipReaderTb4b4b4.Te6edf3getEntriesTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72let Te6edf3mainBinFilename Tff7b72= Te6edf3flashConfigTff7b72?Tb4b4b4.Te6edf3flash_filesTff7b72?Tb4b4b4.Tb4b4b4[Ta5d6ff"0x10000"Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mainBinFilenameTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3binEntry Tff7b72= Te6edf3zipEntriesTb4b4b4.Te6edf3findTb4b4b4(
Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=>
Te6edf3eTb4b4b4.Te6edf3filenameTb4b4b4.Te6edf3endsWithTb4b4b4(Ta5d6ff".bin"Tb4b4b4) Tff7b72&&
Tff7b72!Te6edf3eTb4b4b4.Te6edf3filenameTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"bootloader"Tb4b4b4) Tff7b72&&
Tff7b72!Te6edf3eTb4b4b4.Te6edf3filenameTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"partitions"Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3binEntryTb4b4b4) Te6edf3mainBinFilename Tff7b72= Te6edf3binEntryTb4b4b4.Te6edf3filenameTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mainBinFilenameTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.no_main_bin"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3entry Tff7b72= Te6edf3zipEntriesTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Te6edf3eTb4b4b4.Te6edf3filename Tff7b72=== Te6edf3mainBinFilenameTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3entryTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_extract"Tb4b4b4, Tb4b4b4{ Te6edf3fileTff7b72: Te6edf3mainBinFilename Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3binBlob Tff7b72= Tff7b72await Te6edf3entryTb4b4b4.Te6edf3getDataTb4b4b4(Tff7b72new Tffa657windowTb4b4b4.Te6edf3zipTb4b4b4.Te6edf3BlobWriterTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3transport Tff7b72= Tff7b72new Te6edf3WifiTransportTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3wifiHostTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3transportTb4b4b4.Te6edf3uploadTb4b4b4(Te6edf3binBlobTb4b4b4, Tb4b4b4(Te6edf3percentageTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashingProgress Tff7b72= Te6edf3percentageTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingStatus Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.uploading"Tb4b4b4, Tb4b4b4{ Te6edf3percentage Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.flash_success"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_ota"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isFlashing Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingStatus Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3_flashNrf52Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isFlashing Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingProgress Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingStatus Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.connecting_device"Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3transport Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3transport Tff7b72= Tff7b72await Te6edf3SerialTransportTb4b4b4.Te6edf3requestTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3flasher Tff7b72= Tff7b72new Te6edf3Nrf52DfuFlasherTb4b4b4(Te6edf3transportTb4b4b4.Te6edf3portTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flasherTb4b4b4.Te6edf3flashTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3firmwareFileTb4b4b4, Tb4b4b4(Te6edf3percentageTb4b4b4, Te6edf3messageTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashingProgress Tff7b72= Te6edf3percentageTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingStatus Tff7b72= Te6edf3message Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.flashing"Tb4b4b4, Tb4b4b4{ Te6edf3percentage Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.flash_success"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_flash"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isFlashing Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingStatus Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3transportTb4b4b4) Tff7b72await Te6edf3transportTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3_flashEsp32Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tffa657windowTb4b4b4.Te6edf3ESPLoaderTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.esptool_not_loaded"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3flashConfig Tff7b72= Tff7b72thisTb4b4b4.Te6edf3selectedModelTff7b72?Tb4b4b4.Te6edf3flash_config Tff7b72?? Tff7b72thisTb4b4b4.Te6edf3selectedProductTff7b72?Tb4b4b4.Te6edf3flash_configTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3flashConfigTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.no_flash_config"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3isFlashing Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingProgress Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingStatus Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.connecting_device"Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3transport Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3transport Tff7b72= Tff7b72await Te6edf3SerialTransportTb4b4b4.Te6edf3requestTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3blobReader Tff7b72= Tff7b72new Tffa657windowTb4b4b4.Te6edf3zipTb4b4b4.Te6edf3BlobReaderTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3firmwareFileTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3zipReader Tff7b72= Tff7b72new Tffa657windowTb4b4b4.Te6edf3zipTb4b4b4.Te6edf3ZipReaderTb4b4b4(Te6edf3blobReaderTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3zipEntries Tff7b72= Tff7b72await Te6edf3zipReaderTb4b4b4.Te6edf3getEntriesTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3filesToFlash Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Tb4b4b4[Te6edf3addressTb4b4b4, Te6edf3filenameTb4b4b4] Tff7b72of Tffa657ObjectTb4b4b4.Te6edf3entriesTb4b4b4(Te6edf3flashConfigTb4b4b4.Te6edf3flash_filesTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3entry Tff7b72= Te6edf3zipEntriesTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Te6edf3eTb4b4b4.Te6edf3filename Tff7b72=== Te6edf3filenameTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3entryTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_extract"Tb4b4b4, Tb4b4b4{ Te6edf3fileTff7b72: Te6edf3filename Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3blob Tff7b72= Tff7b72await Te6edf3entryTb4b4b4.Te6edf3getDataTb4b4b4(Tff7b72new Tffa657windowTb4b4b4.Te6edf3zipTb4b4b4.Te6edf3BlobWriterTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3filesToFlashTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3addressTff7b72: Tffa657parseIntTb4b4b4(Te6edf3addressTb4b4b4)Tb4b4b4,
Te6edf3dataTff7b72: Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_readAsBinaryStringTb4b4b4(Te6edf3blobTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3espTransport Tff7b72= Tff7b72new Tffa657windowTb4b4b4.Te6edf3TransportTb4b4b4(Te6edf3transportTb4b4b4.Te6edf3portTb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3esploader Tff7b72= Tff7b72new Tffa657windowTb4b4b4.Te6edf3ESPLoaderTb4b4b4(Tb4b4b4{
Te6edf3transportTff7b72: Te6edf3espTransportTb4b4b4,
Te6edf3baudrateTff7b72: T79c0ff921600Tb4b4b4,
Te6edf3terminalTff7b72: Tb4b4b4{ Te6edf3writeLineTff7b72: Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4, Te6edf3writeTff7b72: Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4, Te6edf3cleanTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3esploaderTb4b4b4.Te6edf3mainTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3esploaderTb4b4b4.Te6edf3writeFlashTb4b4b4(Tb4b4b4{
Te6edf3fileArrayTff7b72: Te6edf3filesToFlashTb4b4b4,
Te6edf3flashSizeTff7b72: Te6edf3flashConfigTb4b4b4.Te6edf3flash_sizeTb4b4b4,
Te6edf3flashModeTff7b72: Ta5d6ff"DIO"Tb4b4b4,
Te6edf3flashFreqTff7b72: Ta5d6ff"80MHz"Tb4b4b4,
Te6edf3calculateMD5HashTff7b72: Tb4b4b4(Te6edf3imgTb4b4b4) Tb4b4b4=> Tffa657windowTb4b4b4.Te6edf3CryptoJSTb4b4b4.Te6edf3MD5Tb4b4b4(Tffa657windowTb4b4b4.Te6edf3CryptoJSTb4b4b4.Te6edf3encTb4b4b4.Te6edf3Latin1Tb4b4b4.Te6edf3parseTb4b4b4(Te6edf3imgTb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3reportProgressTff7b72: Tb4b4b4(Te6edf3idxTb4b4b4, Te6edf3writtenTb4b4b4, Te6edf3totalTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashingProgress Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3written Tff7b72/ Te6edf3totalTb4b4b4) Tff7b72* T79c0ff100Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingStatus Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.flashing_file_progress"Tb4b4b4, Tb4b4b4{
Te6edf3currentTff7b72: Te6edf3idx Tff7b72+ T79c0ff1Tb4b4b4,
Te6edf3totalTff7b72: Te6edf3filesToFlashTb4b4b4.Te6edf3lengthTb4b4b4,
Te6edf3percentageTff7b72: Tff7b72thisTb4b4b4.Te6edf3flashingProgressTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3espTransportTb4b4b4.Te6edf3setDTRTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff100Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3espTransportTb4b4b4.Te6edf3setDTRTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;

Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.flash_success"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3flashError Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_flash"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3flashErrorTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isFlashing Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3flashingStatus Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3transportTb4b4b4) Tff7b72await Te6edf3transportTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3provisionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isProvisioning Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3rom Tff7b72= Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3getRomAsObjectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3romTb4b4b4.Te6edf3parseTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.provisioned_already"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedProduct Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedModelTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.select_product_first"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3product Tff7b72= Tff7b72thisTb4b4b4.Te6edf3selectedProductTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72const Te6edf3model Tff7b72= Tff7b72thisTb4b4b4.Te6edf3selectedModelTb4b4b4.Te6edf3mapped_id Tff7b72?? Tff7b72thisTb4b4b4.Te6edf3selectedModelTb4b4b4.Te6edf3idTb4b4b4;
Tff7b72const Te6edf3hwRev Tff7b72= T79c0ff0x1Tb4b4b4;
Tff7b72const Te6edf3serial Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3now Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3sBytes Tff7b72= Te6edf3RNodeUtilsTb4b4b4.Te6edf3packUInt32BETb4b4b4(Te6edf3serialTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3tBytes Tff7b72= Te6edf3RNodeUtilsTb4b4b4.Te6edf3packUInt32BETb4b4b4(Te6edf3nowTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3checksum Tff7b72= Te6edf3RNodeUtilsTb4b4b4.Te6edf3md5Tb4b4b4(Tb4b4b4[Te6edf3productTb4b4b4, Te6edf3modelTb4b4b4, Te6edf3hwRevTb4b4b4, Tb4b4b4...Te6edf3sBytesTb4b4b4, Tb4b4b4...Te6edf3tBytesTb4b4b4]Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3writeRomTb4b4b4(Te6edf3ROMTb4b4b4.Te6edf3ADDR_PRODUCTTb4b4b4, Te6edf3productTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3writeRomTb4b4b4(Te6edf3ROMTb4b4b4.Te6edf3ADDR_MODELTb4b4b4, Te6edf3modelTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3writeRomTb4b4b4(Te6edf3ROMTb4b4b4.Te6edf3ADDR_HW_REVTb4b4b4, Te6edf3hwRevTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff4Tb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3writeRomTb4b4b4(Te6edf3ROMTb4b4b4.Te6edf3ADDR_SERIAL Tff7b72+ Te6edf3iTb4b4b4, Te6edf3sBytesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3writeRomTb4b4b4(Te6edf3ROMTb4b4b4.Te6edf3ADDR_MADE Tff7b72+ Te6edf3iTb4b4b4, Te6edf3tBytesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff16Tb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3writeRomTb4b4b4(Te6edf3ROMTb4b4b4.Te6edf3ADDR_CHKSUM Tff7b72+ Te6edf3iTb4b4b4, Te6edf3checksumTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff128Tb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3writeRomTb4b4b4(Te6edf3ROMTb4b4b4.Te6edf3ADDR_SIGNATURE Tff7b72+ Te6edf3iTb4b4b4, T79c0ff0x00Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3writeRomTb4b4b4(Te6edf3ROMTb4b4b4.Te6edf3ADDR_INFO_LOCKTb4b4b4, Te6edf3ROMTb4b4b4.Te6edf3INFO_LOCK_BYTETb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3RNodeUtilsTb4b4b4.Te6edf3sleepMillisTb4b4b4(T79c0ff5000Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3resetTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.provision_success"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_provision"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isProvisioning Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3setFirmwareHashTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isSettingFirmwareHash Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3rom Tff7b72= Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3getRomAsObjectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3romTb4b4b4.Te6edf3parseTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.not_provisioned"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3hash Tff7b72= Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3getFirmwareHashTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3setFirmwareHashTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3RNodeUtilsTb4b4b4.Te6edf3sleepMillisTb4b4b4(T79c0ff5000Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3resetTb4b4b4(Tb4b4b4)Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.hash_success"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_set_hash"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isSettingFirmwareHash Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3enableTncModeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3setFrequencyTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configFrequencyTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3setBandwidthTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configBandwidthTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3setTxPowerTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configTxPowerTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3setSpreadingFactorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configSpreadingFactorTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3setCodingRateTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3configCodingRateTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3setRadioStateOnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3RNodeUtilsTb4b4b4.Te6edf3sleepMillisTb4b4b4(T79c0ff500Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3saveConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3saveConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3RNodeUtilsTb4b4b4.Te6edf3sleepMillisTb4b4b4(T79c0ff5000Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3resetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.tnc_enabled"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_enable_tnc"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3disableTncModeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3deleteConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3RNodeUtilsTb4b4b4.Te6edf3sleepMillisTb4b4b4(T79c0ff5000Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3resetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.tnc_disabled"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_disable_tnc"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3enableBluetoothTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3enableBluetoothTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3RNodeUtilsTb4b4b4.Te6edf3sleepMillisTb4b4b4(T79c0ff1000Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.bluetooth_enabled"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(
Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_enable_bluetooth"Tb4b4b4, Tb4b4b4{
Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3eTb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3disableBluetoothTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3disableBluetoothTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3RNodeUtilsTb4b4b4.Te6edf3sleepMillisTb4b4b4(T79c0ff1000Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.bluetooth_disabled"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(
Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_disable_bluetooth"Tb4b4b4, Tb4b4b4{
Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3eTb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3startBluetoothPairingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3_withRNodeTb4b4b4(Tff7b72async Tb4b4b4(Te6edf3rnodeTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72await Te6edf3rnodeTb4b4b4.Te6edf3startBluetoothPairingTb4b4b4(Tb4b4b4(Te6edf3pinTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.bluetooth_pairing_pin"Tb4b4b4, Tb4b4b4{ Te6edf3pin Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.alerts.bluetooth_pairing_started"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.rnode_flasher.errors.failed_start_pairing"Tb4b4b4, Tb4b4b4{ Te6edf3errorTff7b72: Te6edf3eTb4b4b4.Te6edf3message Tff7b72|| Te6edf3e Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3_readAsBinaryStringTb4b4b4(Te6edf3blobTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3r Tff7b72= Tff7b72new Te6edf3FileReaderTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3rTb4b4b4.Te6edf3onload Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3resolveTb4b4b4(Te6edf3rTb4b4b4.Te6edf3resultTb4b4b4)Tb4b4b4;
Te6edf3rTb4b4b4.Te6edf3readAsBinaryStringTb4b4b4(Te6edf3blobTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3_displayBufferToPngTb4b4b4(Te6edf3displayBufferTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3displayArea Tff7b72= Te6edf3displayBufferTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff512Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3statArea Tff7b72= Te6edf3displayBufferTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff512Tb4b4b4, T79c0ff1024Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3displayCanvas Tff7b72= Tff7b72thisTb4b4b4.Te6edf3_frameBufferToCanvasTb4b4b4(Te6edf3displayAreaTb4b4b4, T79c0ff64Tb4b4b4, T79c0ff64Tb4b4b4, Ta5d6ff"#000000"Tb4b4b4, Ta5d6ff"#FFFFFF"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3statCanvas Tff7b72= Tff7b72thisTb4b4b4.Te6edf3_frameBufferToCanvasTb4b4b4(Te6edf3statAreaTb4b4b4, T79c0ff64Tb4b4b4, T79c0ff64Tb4b4b4, Ta5d6ff"#000000"Tb4b4b4, Ta5d6ff"#FFFFFF"Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3canvas Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"canvas"Tb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3width Tff7b72= T79c0ff128Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3height Tff7b72= T79c0ff64Tb4b4b4;
Tff7b72const Te6edf3ctx Tff7b72= Te6edf3canvasTb4b4b4.Te6edf3getContextTb4b4b4(Ta5d6ff"2d"Tb4b4b4)Tb4b4b4;
Te6edf3ctxTb4b4b4.Te6edf3drawImageTb4b4b4(Te6edf3displayCanvasTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3ctxTb4b4b4.Te6edf3drawImageTb4b4b4(Te6edf3statCanvasTb4b4b4, T79c0ff64Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3scaledCanvas Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"canvas"Tb4b4b4)Tb4b4b4;
Te6edf3scaledCanvasTb4b4b4.Te6edf3width Tff7b72= T79c0ff512Tb4b4b4;
Te6edf3scaledCanvasTb4b4b4.Te6edf3height Tff7b72= T79c0ff256Tb4b4b4;
Tff7b72const Te6edf3sCtx Tff7b72= Te6edf3scaledCanvasTb4b4b4.Te6edf3getContextTb4b4b4(Ta5d6ff"2d"Tb4b4b4)Tb4b4b4;
Te6edf3sCtxTb4b4b4.Te6edf3imageSmoothingEnabled Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3sCtxTb4b4b4.Te6edf3drawImageTb4b4b4(Te6edf3canvasTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff512Tb4b4b4, T79c0ff256Tb4b4b4)Tb4b4b4;

Tff7b72return Te6edf3scaledCanvasTb4b4b4.Te6edf3toDataURLTb4b4b4(Ta5d6ff"image/png"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3_frameBufferToCanvasTb4b4b4(Te6edf3fbTb4b4b4, Te6edf3wTb4b4b4, Te6edf3hTb4b4b4, Te6edf3bgTb4b4b4, Te6edf3fgTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3c Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"canvas"Tb4b4b4)Tb4b4b4;
Te6edf3cTb4b4b4.Te6edf3width Tff7b72= Te6edf3wTb4b4b4;
Te6edf3cTb4b4b4.Te6edf3height Tff7b72= Te6edf3hTb4b4b4;
Tff7b72const Te6edf3ctx Tff7b72= Te6edf3cTb4b4b4.Te6edf3getContextTb4b4b4(Ta5d6ff"2d"Tb4b4b4)Tb4b4b4;
Te6edf3ctxTb4b4b4.Te6edf3fillStyle Tff7b72= Te6edf3bgTb4b4b4;
Te6edf3ctxTb4b4b4.Te6edf3fillRectTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3wTb4b4b4, Te6edf3hTb4b4b4)Tb4b4b4;
Te6edf3ctxTb4b4b4.Te6edf3fillStyle Tff7b72= Te6edf3fgTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3y Tff7b72= T79c0ff0Tb4b4b4; Te6edf3y Tff7b72< Te6edf3hTb4b4b4; Te6edf3yTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3x Tff7b72= T79c0ff0Tb4b4b4; Te6edf3x Tff7b72< Te6edf3wTb4b4b4; Te6edf3xTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3idx Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3y Tff7b72* Te6edf3w Tff7b72+ Te6edf3xTb4b4b4) Tff7b72/ T79c0ff8Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bit Tff7b72= Tb4b4b4(Te6edf3fbTb4b4b4[Te6edf3idxTb4b4b4] Tff7b72>> Tb4b4b4(T79c0ff7 Tff7b72- Tb4b4b4(Te6edf3x Tff7b72% T79c0ff8Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72& T79c0ff1Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3bitTb4b4b4) Te6edf3ctxTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3cTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────